home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / XMLWriter.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  2.5 KB  |  164 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.io.Writer;
  7.  
  8. public final class XMLWriter extends Writer {
  9.    byte[] buffer;
  10.    boolean firstWrite;
  11.    int encoding;
  12.    // $FF: renamed from: os java.io.OutputStream
  13.    OutputStream field_0;
  14.  
  15.    public XMLWriter(OutputStream var1) {
  16.       this(var1, 0);
  17.    }
  18.  
  19.    public XMLWriter(OutputStream var1, int var2) {
  20.       this.buffer = new byte[8082];
  21.       this.firstWrite = true;
  22.       this.field_0 = var1;
  23.       this.setEncoding(var2);
  24.    }
  25.  
  26.    private void setEncoding(int var1) {
  27.       this.encoding = var1;
  28.    }
  29.  
  30.    public void write(char[] var1, int var2, int var3) throws IOException {
  31.       int var4 = 0;
  32.       switch (this.encoding) {
  33.          case 0:
  34.             var4 = this.fillUTF8(var1, var2, var3);
  35.             break;
  36.          case 1:
  37.             if (this.firstWrite) {
  38.                this.field_0.write(new byte[]{-2, -1});
  39.                this.firstWrite = false;
  40.             }
  41.  
  42.             var4 = this.fillUTF1612(var1, var2, var3);
  43.             break;
  44.          case 2:
  45.             if (this.firstWrite) {
  46.                this.field_0.write(new byte[]{-1, -2});
  47.                this.firstWrite = false;
  48.             }
  49.  
  50.             var4 = this.fillUTF1621(var1, var2, var3);
  51.             break;
  52.          case 3:
  53.             var4 = this.fillISO88591(var1, var2, var3);
  54.             break;
  55.          case 4:
  56.             var4 = this.fillASCII(var1, var2, var3);
  57.             break;
  58.          default:
  59.             Debug.assert(false, String.valueOf("unknown encoding: ").concat(String.valueOf(this.encoding)));
  60.       }
  61.  
  62.       this.field_0.write(this.buffer, 0, var4);
  63.    }
  64.  
  65.    public int fillUTF1621(char[] var1, int var2, int var3) throws IOException {
  66.       if (var3 * 2 > this.buffer.length) {
  67.          this.buffer = new byte[var3 * 2];
  68.       }
  69.  
  70.       int var4 = 0;
  71.  
  72.       for(int var5 = var2 + var3; var2 < var5; ++var2) {
  73.          this.buffer[var4++] = (byte)(var1[var2] & '\uffff');
  74.          this.buffer[var4++] = (byte)((var1[var2] & -65536) >> 8);
  75.       }
  76.  
  77.       return var4;
  78.    }
  79.  
  80.    public int fillUTF1612(char[] var1, int var2, int var3) throws IOException {
  81.       if (var3 * 2 > this.buffer.length) {
  82.          this.buffer = new byte[var3 * 2];
  83.       }
  84.  
  85.       int var4 = 0;
  86.  
  87.       for(int var5 = var2 + var3; var2 < var5; ++var2) {
  88.          this.buffer[var4++] = (byte)((var1[var2] & -65536) >> 8);
  89.          this.buffer[var4++] = (byte)(var1[var2] & '\uffff');
  90.       }
  91.  
  92.       return var4;
  93.    }
  94.  
  95.    public int fillASCII(char[] var1, int var2, int var3) throws IOException {
  96.       if (var3 > this.buffer.length) {
  97.          this.buffer = new byte[var3];
  98.       }
  99.  
  100.       int var4 = 0;
  101.  
  102.       for(int var5 = var2 + var3; var2 < var5; ++var2) {
  103.          this.buffer[var4++] = (byte)(var1[var2] & 127);
  104.       }
  105.  
  106.       return var4;
  107.    }
  108.  
  109.    public int fillISO88591(char[] var1, int var2, int var3) throws IOException {
  110.       if (var3 > this.buffer.length) {
  111.          this.buffer = new byte[var3];
  112.       }
  113.  
  114.       int var4 = 0;
  115.  
  116.       for(int var5 = var2 + var3; var2 < var5; ++var2) {
  117.          this.buffer[var4++] = (byte)(var1[var2] & 255);
  118.       }
  119.  
  120.       return var4;
  121.    }
  122.  
  123.    public int fillUTF8(char[] var1, int var2, int var3) throws IOException {
  124.       if (var3 * 4 > this.buffer.length) {
  125.          this.buffer = new byte[var3 * 4];
  126.       }
  127.  
  128.       int var4 = 0;
  129.  
  130.       for(int var5 = var2 + var3; var2 < var5; ++var2) {
  131.          char var6 = var1[var2];
  132.          if (var6 >= 1 && var6 <= 127) {
  133.             this.buffer[var4++] = (byte)var6;
  134.          } else if (var6 > 2047) {
  135.             this.buffer[var4++] = (byte)(224 | var6 >> 12 & 15);
  136.             this.buffer[var4++] = (byte)(128 | var6 >> 6 & 63);
  137.             this.buffer[var4++] = (byte)(128 | var6 >> 0 & 63);
  138.          } else {
  139.             this.buffer[var4++] = (byte)(192 | var6 >> 6 & 31);
  140.             this.buffer[var4++] = (byte)(128 | var6 >> 0 & 63);
  141.          }
  142.       }
  143.  
  144.       return var4;
  145.    }
  146.  
  147.    public void flush() throws IOException {
  148.       if (this.field_0 == null) {
  149.          throw new IOException();
  150.       } else {
  151.          this.field_0.flush();
  152.       }
  153.    }
  154.  
  155.    public void close() throws IOException {
  156.       if (this.field_0 == null) {
  157.          throw new IOException();
  158.       } else {
  159.          this.field_0.close();
  160.          this.field_0 = null;
  161.       }
  162.    }
  163. }
  164.